/**
 * 依此执行一系列任务
 * 所有任务全部完成后可以拿到每个任务的执行结果
 * 需要返回两个方法，start用于启动任务，stop用于停止任务
 * 每个任务具有原子性，即不可中断，只能在两个任务之前中断
 * @param  {...any} tasks
 */

export const process = (...tasks) => {
  let isStop = false
  let index = 0
  let result = []
  return new Promise((resolve, reject) => {
    resolve({
      start() {
        while(index < tasks.length && !isStop) {
          const task = tasks[index]
          task().then((res) => {
            result[index] = res
            index++
          }).catch((err) => {
            reject(err)
          })
        }
        if(index === tasks.length) {
          resolve(result)
        }
      },
      stop() {
        isStop = false
      }
    })
  })
}
